/**
 * @file tableau_monstre.h
 * Definit les caracteristiques du tableau de monstres.
 */
#ifndef _TABLEAU_MONSTRE_H
#define _TABLEAU_MONSTRE_H

#include "monstre.h"
#include <iostream>

/**
* /struct Structure tableau_monstre
*/
struct tableau_monstre
{
    monstre* mon;///@param mon pointeur sur monstre pointeur du premier monstre dans le tableau
    int nb_monstre_possible;///@param nb_monstre_possible entier nombre max de monstre dans le tableau
    int nb_monstre;///@param nb_monstre entier nombre de monstre dans le tableau
};

/**
@brief creer un tableau de monstres
@param tableau de caractère constante filename
@return pointeur sur tableau_monstre
*/
tableau_monstre* creerTableauMonstre(const char filename[]);

/**
@brief supprime un tableau de monstres
@param tableau_monstre* tmon
@return none
*/
void supprimeTableauMonstre(tableau_monstre * tmon);

/**
@brief affiche le tableau de monstre
@param tableau_monstre* constante tmon
@return none
*/
void afficheTabMonstre(const tableau_monstre* tmon);

/**
@brief recupère le monstre
@param tableau_monstre* constante tmon
@return pointeur sur monstre
*/
monstre * tabMonstreGetMonstre(const tableau_monstre* tmon);

/**
@brief recupère le nombre de monstres possible
@param tableau_monstre* constante tmon
@return entier
*/
int tabMonstreGetNbPossible(const tableau_monstre* tmon);

/**
@brief recupère le nombre de monstres
@param tableau_monstre* constante tmon
@return entier
*/
int tabMonstreGetNbMonstre(const tableau_monstre* tmon);

/**
@brief change le monstre
@param tableau_monstre* tmon, monstre* mon
@return none
*/
void tabMonstreSetMonstre(tableau_monstre* tmon, monstre* mon);

/**
@brief change le nombre de monstres possible
@param tableau_monstre* tmon, entier nb
@return none
*/
void tabMonstreSetNbPossible(tableau_monstre* tmon, int nb);

/**
@brief change le nombre de monstres
@param tableau_monstre* tmon, entier nb
@return none
*/
void tabMonstreSetNbMonstre(tableau_monstre* tmon, int nb);

/**
@brief ajout d'un monstre
@param tableau_monstre* tmon, monstre* m
@return none
*/
void ajoutMonstre(tableau_monstre* tmon, monstre* m);

/**
@brief recherche un monstre dans le tableau
@param tableau_monstre* tmon, entier id
@return pointeur sur monstre
*/
monstre* chercheMonstre(tableau_monstre* tmon, int id);

/**
@brief supprime un monstre
@param tableau_monstre* tmon, entier id
@return none
*/
void supprimeMonstre(tableau_monstre* tmon, int id);

/**
@brief trie du tableau selon le niveau et le terrain
@param tableau_monstre* tmon
@return none
*/
void trieTableauMonstre(tableau_monstre* tmon);

/**
@brief renvoie l'adresse du 1er monstre du terrain et le nombre de monstre sur le terrain
@param tableau_monstre* tmon, entiers niv ter, pointeur sur entier nbrMon
@return entier
*/
int chercheMonstreTerrain(tableau_monstre* tmon,int niv, int ter,int* nbrMon);

#endif
